<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Dynamic programming language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Dynamic_programming_language"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Dynamic_programming_language rootpage-Dynamic_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Dynamic programming language</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1248332772">
/* start https://en.wikipedia.org/ */
.mw-parser-output .multiple-issues-text{width:95%;margin:0.2em 0}.mw-parser-output .multiple-issues-text>.mw-collapsible-content{margin-top:0.3em}.mw-parser-output .compact-ambox .ambox{border:none;border-collapse:collapse;background-color:transparent;margin:0 0 0 1.6em!important;padding:0!important;width:auto;display:block}body.mediawiki .mw-parser-output .compact-ambox .ambox.mbox-small-left{font-size:100%;width:auto;margin:0}.mw-parser-output .compact-ambox .ambox .mbox-text{padding:0!important;margin:0!important}.mw-parser-output .compact-ambox .ambox .mbox-text-span{display:list-item;line-height:1.5em;list-style-type:disc}body.skin-minerva .mw-parser-output .multiple-issues-text>.mw-collapsible-toggle,.mw-parser-output .compact-ambox .ambox .mbox-image,.mw-parser-output .compact-ambox .ambox .mbox-imageright,.mw-parser-output .compact-ambox .ambox .mbox-empty-cell,.mw-parser-output .compact-ambox .hide-when-compact{display:none}
/* end https://en.wikipedia.org/ */
</style>
<p>A <b>dynamic programming language</b> is a type of programming language that allows various operations to be determined and executed at runtime. This is different from the compilation phase. Key decisions about variables, method calls, or data types are made when the program is running, unlike in <a href="Static_program_analysis" title="Static program analysis">static languages</a>, where the structure and types are fixed during compilation. Dynamic languages provide flexibility. This allows developers to write more adaptable and concise code.
</p><p>For instance, in a dynamic language, a variable can start as an integer. It can later be reassigned to hold a string without explicit type declarations. This feature of dynamic typing enables more fluid and less restrictive coding. Developers can focus on the logic and functionality rather than the constraints of the language.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Implementation">Implementation</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Eval">Eval</h3></div>
<p>Some dynamic languages offer an <i><a href="Eval" title="Eval">eval</a></i> function. This function takes a string or <a href="Abstract_syntax_tree" title="Abstract syntax tree">abstract syntax tree</a> containing code in the language and executes it. If this code stands for an expression, the resulting value is returned. <a href="Erik_Meijer_(computer_scientist)" title="Erik Meijer (computer scientist)">Erik Meijer</a> and Peter Drayton distinguish the <a href="Runtime_code_generation" class="mw-redirect" title="Runtime code generation">runtime code generation</a> offered by eval from the <a href="Dynamic_loading" title="Dynamic loading">dynamic loading</a> offered by <a href="Shared_libraries" class="mw-redirect" title="Shared libraries">shared libraries</a> and warn that in many cases eval is used merely to implement <a href="Higher-order_function" title="Higher-order function">higher-order functions</a> (by passing functions as strings) or <a href="Deserialization" class="mw-redirect" title="Deserialization">deserialization</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Object_runtime_alteration">Object runtime alteration</h3></div>
<p>A type or object system can typically be modified during runtime in a dynamic language. This can mean generating new objects from a runtime definition or based on <a href="Mixin" title="Mixin">mixins</a> of existing types or objects. This can also refer to changing the <a href="Inheritance_(object-oriented_programming)" title="Inheritance (object-oriented programming)">inheritance</a> or type tree, and thus altering the way that existing types behave (especially with respect to the invocation of <a href="Method_(computer_science)" class="mw-redirect" title="Method (computer science)">methods</a>).
</p>
<div class="mw-heading mw-heading3"><h3 id="Type_inference">Type inference</h3></div>
<p>As a lot of dynamic languages come with a dynamic type system, runtime inference of types based on values for internal interpretation marks a common task. As value types may change throughout interpretation, it is regularly used upon performing atomic operations.
</p>
<div class="mw-heading mw-heading3"><h3 id="Variable_memory_allocation">Variable memory allocation</h3></div>
<p>Static programming languages (possibly indirectly) require developers to define the size of utilized memory before compilation (unless working around with pointer logic). Consistent with object runtime alteration, dynamic languages implicitly need to (re-)allocate memory based on program individual operations.
</p>
<div class="mw-heading mw-heading3"><h3 id="Reflection">Reflection</h3></div>
<p><a href="Reflection_(computer_science)" class="mw-redirect" title="Reflection (computer science)">Reflection</a> is common in many dynamic languages, and typically involves <a href="Introspection_(computer_science)" class="mw-redirect" title="Introspection (computer science)">analysis</a> of the types and metadata of generic or <a href="Type_polymorphism" class="mw-redirect" title="Type polymorphism">polymorphic</a> data. It can, however, also include full evaluation and modification of a program's code as data, such as the features that Lisp provides in analyzing <a href="S-expression" title="S-expression">S-expressions</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Macros">Macros</h3></div>
<p>A limited number of dynamic programming languages provide features which combine <a href="Code_introspection" class="mw-redirect" title="Code introspection">code introspection</a> (the ability to examine classes, functions, and keywords to know what they are, what they do and what they know) and eval in a feature called <a href="Macro_(computer_science)" title="Macro (computer science)">macros</a>. Most programmers today who are aware of the term <i>macro</i> have encountered them in <a href="C_(programming_language)" title="C (programming language)">C</a> or <a href="C%2B%2B" title="C++">C++</a>, where they are a static feature which is built in a small subset of the language, and are capable only of string substitutions on the text of the program. In dynamic languages, however, they provide access to the inner workings of the compiler, <i>and</i> full access to the interpreter, virtual machine, or runtime, allowing the definition of language-like constructs which can optimize code or modify the syntax or grammar of the language.
</p><p><a href="Assembly_language" title="Assembly language">Assembly</a>, <a href="C_(programming_language)" title="C (programming language)">C</a>, <a href="C%2B%2B" title="C++">C++</a>, early <a href="Java_(programming_language)" title="Java (programming language)">Java</a>, and <a href="Fortran" title="Fortran">Fortran</a> do not generally fit into this category.
</p><p>The earliest dynamic programming language is considered to be Lisp (McCarthy, 1965) which continued to influence the design of programming languages to the present day.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Example_code">Example code</h2></div>
<p>The following examples show dynamic features using the language <a href="Common_Lisp" title="Common Lisp">Common Lisp</a> and its <a href="Common_Lisp_Object_System" title="Common Lisp Object System">Common Lisp Object System</a> (CLOS).
</p>
<div class="mw-heading mw-heading3"><h3 id="Computation_of_code_at_runtime_and_late_binding">Computation of code at runtime and late binding</h3></div>
<p>The example shows how a function can be modified at runtime from computed source code
</p>
<div class="mw-highlight mw-highlight-lang-lisp mw-content-ltr" dir="ltr"><pre><span class="c1">; the source code is stored as data in a variable</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defparameter</span><span class="w"> </span><span class="vg">*best-guess-formula*</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nv">x</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">*</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="nv">x</span><span class="w"> </span><span class="mf">2.5</span><span class="p">)))</span>
<span class="vg">*BEST-GUESS-FORMULA*</span>
<span class="c1">; a function is created from the code and compiled at runtime, the function is available under the name best-guess</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">compile</span><span class="w"> </span><span class="ss">'best-guess</span><span class="w"> </span><span class="vg">*best-guess-formula*</span><span class="p">)</span>
<span class="err">#</span><span class="nv"><Function</span><span class="w"> </span><span class="mi">15</span><span class="w"> </span><span class="nv">40600152F4></span>
<span class="c1">; the function can be called</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nv">best-guess</span><span class="w"> </span><span class="mf">10.3</span><span class="p">)</span>
<span class="mf">265.225</span>
<span class="c1">; the source code might be improved at runtime</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="vg">*best-guess-formula*</span><span class="w"> </span><span class="o">`</span><span class="p">(</span><span class="k">lambda</span><span class="w"> </span><span class="p">(</span><span class="nv">x</span><span class="p">)</span><span class="w"> </span><span class="o">,</span><span class="p">(</span><span class="nb">list</span><span class="w"> </span><span class="ss">'sqrt</span><span class="w"> </span><span class="p">(</span><span class="nb">third</span><span class="w"> </span><span class="vg">*best-guess-formula*</span><span class="p">))))</span>
<span class="p">(</span><span class="nv">LAMBDA</span><span class="w"> </span><span class="p">(</span><span class="nv">X</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">SQRT</span><span class="w"> </span><span class="p">(</span><span class="nb">*</span><span class="w"> </span><span class="nv">X</span><span class="w"> </span><span class="nv">X</span><span class="w"> </span><span class="mf">2.5</span><span class="p">)))</span>
<span class="c1">; a new version of the function is being compiled</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">compile</span><span class="w"> </span><span class="ss">'best-guess</span><span class="w"> </span><span class="vg">*best-guess-formula*</span><span class="p">)</span>
<span class="err">#</span><span class="nv"><Function</span><span class="w"> </span><span class="mi">16</span><span class="w"> </span><span class="nv">406000085C></span>
<span class="c1">; the next call will call the new function, a feature of late binding</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nv">best-guess</span><span class="w"> </span><span class="mf">10.3</span><span class="p">)</span>
<span class="mf">16.28573</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Object_runtime_alteration_2">Object runtime alteration</h3></div>
<p>This example shows how an existing instance can be changed to include a new slot when its class changes and that an existing method can be replaced with a new version.
</p>
<div class="mw-highlight mw-highlight-lang-lisp mw-content-ltr" dir="ltr"><pre><span class="c1">; a person class. The person has a name.</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">person</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">((</span><span class="nv">name</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:name</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-CLASS</span><span class="w"> </span><span class="nv">PERSON</span><span class="w"> </span><span class="nv">4020081FB3></span>
<span class="c1">; a custom printing method for the objects of class person</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="p">((</span><span class="nv">p</span><span class="w"> </span><span class="nv">person</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">print-unreadable-object</span><span class="w"> </span><span class="p">(</span><span class="nv">p</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="ss">:type</span><span class="w"> </span><span class="no">t</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">format</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="s">"~a"</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="ss">'name</span><span class="p">))))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="no">NIL</span><span class="w"> </span><span class="p">(</span><span class="nv">PERSON</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">4020066E5B></span>
<span class="c1">; one example person instance</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="vg">*person-1*</span><span class="w"> </span><span class="p">(</span><span class="nb">make-instance</span><span class="w"> </span><span class="ss">'person</span><span class="w"> </span><span class="ss">:name</span><span class="w"> </span><span class="s">"Eva Luator"</span><span class="p">))</span>
<span class="err">#</span><span class="nv"><PERSON</span><span class="w"> </span><span class="nv">Eva</span><span class="w"> </span><span class="nv">Luator></span>
<span class="c1">; the class person gets a second slot. It then has the slots name and age.</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">person</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">((</span><span class="nv">name</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:name</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">age</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:age</span><span class="w"> </span><span class="ss">:initform</span><span class="w"> </span><span class="ss">:unknown</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-CLASS</span><span class="w"> </span><span class="nv">PERSON</span><span class="w"> </span><span class="nv">4220333E23></span>
<span class="c1">; updating the method to print the object</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="p">((</span><span class="nv">p</span><span class="w"> </span><span class="nv">person</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">print-unreadable-object</span><span class="w"> </span><span class="p">(</span><span class="nv">p</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="ss">:type</span><span class="w"> </span><span class="no">t</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">format</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="s">"~a age: ~"</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="ss">'name</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="ss">'age</span><span class="p">))))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="no">NIL</span><span class="w"> </span><span class="p">(</span><span class="nv">PERSON</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">402022ADE3></span>
<span class="c1">; the existing object has now changed, it has an additional slot and a new print method</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="vg">*person-1*</span>
<span class="err">#</span><span class="nv"><PERSON</span><span class="w"> </span><span class="nv">Eva</span><span class="w"> </span><span class="nv">Luator</span><span class="w"> </span><span class="nv">age:</span><span class="w"> </span><span class="nv">UNKNOWN></span>
<span class="c1">; we can set the new age slot of instance</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="vg">*person-1*</span><span class="w"> </span><span class="ss">'age</span><span class="p">)</span><span class="w"> </span><span class="mi">25</span><span class="p">)</span>
<span class="mi">25</span>
<span class="c1">; the object has been updated</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="vg">*person-1*</span>
<span class="err">#</span><span class="nv"><PERSON</span><span class="w"> </span><span class="nv">Eva</span><span class="w"> </span><span class="nv">Luator</span><span class="w"> </span><span class="nv">age:</span><span class="w"> </span><span class="nv">25></span>
</pre></div>
<p>let foo = 42; // foo is now a number
foo = "bar"; // foo is now a string
foo = true; // foo is now a boolean
</p>
<div class="mw-heading mw-heading3"><h3 id="Assembling_of_code_at_runtime_based_on_the_class_of_instances">Assembling of code at runtime based on the class of instances</h3></div>
<p>In the next example, the class <b>person</b> gets a new superclass. The <b>print</b> method gets redefined such that it assembles several methods into the effective method. The effective method gets assembled based on the class of the argument and the at runtime available and applicable methods.
</p>
<div class="mw-highlight mw-highlight-lang-lisp mw-content-ltr" dir="ltr"><pre><span class="c1">; the class person</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">person</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">((</span><span class="nv">name</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:name</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-CLASS</span><span class="w"> </span><span class="nv">PERSON</span><span class="w"> </span><span class="nv">4220333E23></span>
<span class="c1">; a person just prints its name</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="p">((</span><span class="nv">p</span><span class="w"> </span><span class="nv">person</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">print-unreadable-object</span><span class="w"> </span><span class="p">(</span><span class="nv">p</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="ss">:type</span><span class="w"> </span><span class="no">t</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">format</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="s">"~a"</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="ss">'name</span><span class="p">))))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="no">NIL</span><span class="w"> </span><span class="p">(</span><span class="nv">PERSON</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">40200605AB></span>
<span class="c1">; a person instance</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defparameter</span><span class="w"> </span><span class="vg">*person-1*</span><span class="w"> </span><span class="p">(</span><span class="nb">make-instance</span><span class="w"> </span><span class="ss">'person</span><span class="w"> </span><span class="ss">:name</span><span class="w"> </span><span class="s">"Eva Luator"</span><span class="p">))</span>
<span class="vg">*PERSON-1*</span>
<span class="c1">; displaying a person instance</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="vg">*person-1*</span>
<span class="err">#</span><span class="nv"><PERSON</span><span class="w"> </span><span class="nv">Eva</span><span class="w"> </span><span class="nv">Luator></span>
<span class="c1">; now redefining the print method to be extensible</span>
<span class="c1">; the around method creates the context for the print method and it calls the next method</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="ss">:around</span><span class="w"> </span><span class="p">((</span><span class="nv">p</span><span class="w"> </span><span class="nv">person</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">print-unreadable-object</span><span class="w"> </span><span class="p">(</span><span class="nv">p</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="ss">:type</span><span class="w"> </span><span class="no">t</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">call-next-method</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="p">(</span><span class="ss">:AROUND</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">PERSON</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">4020263743></span>
<span class="c1">; the primary method prints the name</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="p">((</span><span class="nv">p</span><span class="w"> </span><span class="nv">person</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">format</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="s">"~a"</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="ss">'name</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="no">NIL</span><span class="w"> </span><span class="p">(</span><span class="nv">PERSON</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">40202646BB></span>
<span class="c1">; a new class id-mixin provides an id</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">id-mixin</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">((</span><span class="nv">id</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:id</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-CLASS</span><span class="w"> </span><span class="nv">ID-MIXIN</span><span class="w"> </span><span class="nv">422034A7AB></span>
<span class="c1">; the print method just prints the value of the id slot</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defmethod</span><span class="w"> </span><span class="nb">print-object</span><span class="w"> </span><span class="ss">:after</span><span class="w"> </span><span class="p">((</span><span class="nv">object</span><span class="w"> </span><span class="nv">id-mixin</span><span class="p">)</span><span class="w"> </span><span class="nc">stream</span><span class="p">)</span>
<span class="w"> </span><span class="p">(</span><span class="nb">format</span><span class="w"> </span><span class="nc">stream</span><span class="w"> </span><span class="s">" ID: ~a"</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="nv">object</span><span class="w"> </span><span class="ss">'id</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-METHOD</span><span class="w"> </span><span class="nv">PRINT-OBJECT</span><span class="w"> </span><span class="p">(</span><span class="ss">:AFTER</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nv">ID-MIXIN</span><span class="w"> </span><span class="no">T</span><span class="p">)</span><span class="w"> </span><span class="nv">4020278E33></span>
<span class="c1">; now we redefine the class person to include the mixin id-mixin</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="mi">241</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">defclass</span><span class="w"> </span><span class="nv">person</span><span class="w"> </span><span class="p">(</span><span class="nv">id-mixin</span><span class="p">)</span><span class="w"> </span><span class="p">((</span><span class="nv">name</span><span class="w"> </span><span class="ss">:initarg</span><span class="w"> </span><span class="ss">:name</span><span class="p">)))</span>
<span class="err">#</span><span class="nv"><STANDARD-CLASS</span><span class="w"> </span><span class="nv">PERSON</span><span class="w"> </span><span class="nv">4220333E23></span>
<span class="c1">; the existing instance *person-1* now has a new slot and we set it to 42</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="mi">242</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="p">(</span><span class="nb">setf</span><span class="w"> </span><span class="p">(</span><span class="nb">slot-value</span><span class="w"> </span><span class="vg">*person-1*</span><span class="w"> </span><span class="ss">'id</span><span class="p">)</span><span class="w"> </span><span class="mi">42</span><span class="p">)</span>
<span class="mi">42</span>
<span class="c1">; displaying the object again. The print-object function now has an effective method, which calls three methods: an around method, the primary method and the after method.</span>
<span class="nv">CL-USER</span><span class="w"> </span><span class="mi">243</span><span class="w"> </span><span class="nb">></span><span class="w"> </span><span class="vg">*person-1*</span>
<span class="err">#</span><span class="nv"><PERSON</span><span class="w"> </span><span class="nv">Eva</span><span class="w"> </span><span class="nv">Luator</span><span class="w"> </span><span class="nv">ID:</span><span class="w"> </span><span class="nv">42></span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p>Popular dynamic programming languages include <a href="JavaScript" title="JavaScript">JavaScript</a>, <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="PHP" title="PHP">PHP</a>, <a href="Lua_(programming_language)" class="mw-redirect" title="Lua (programming language)">Lua</a> and <a href="Perl" title="Perl">Perl</a>. The following are generally considered dynamic languages:
</p>
<ul><li><a href="ActionScript" title="ActionScript">ActionScript</a></li>
<li><a href="BeanShell" title="BeanShell">BeanShell</a><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></li>
<li><a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> (using reflection)</li>
<li><a href="Clojure" title="Clojure">Clojure</a></li>
<li><a href="CobolScript" title="CobolScript">CobolScript</a></li>
<li><a href="ColdFusion_Markup_Language" title="ColdFusion Markup Language">ColdFusion Markup Language</a></li>
<li><a href="Common_Lisp" title="Common Lisp">Common Lisp</a> and most other <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisps</a></li>
<li><a href="Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a></li>
<li><a href="E_programming_language" class="mw-redirect" title="E programming language">E</a></li>
<li><a href="Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a></li>
<li><a href="Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a></li>
<li><a href="Forth_(programming_language)" title="Forth (programming language)">Forth</a></li>
<li><a href="Gambas" title="Gambas">Gambas</a></li>
<li><a href="GDScript" class="mw-redirect" title="GDScript">GDScript</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></li>
<li><a href="Java_(programming_language)" title="Java (programming language)">Java (using Reflection)</a></li>
<li><a href="JavaScript" title="JavaScript">JavaScript</a></li>
<li><a href="Julia_(programming_language)" title="Julia (programming language)">Julia</a></li>
<li><a href="Lua_(programming_language)" class="mw-redirect" title="Lua (programming language)">Lua</a></li>
<li><a href="MATLAB" title="MATLAB">MATLAB</a> / <a href="GNU_Octave" title="GNU Octave">Octave</a></li>
<li><a href="Objective-C" title="Objective-C">Objective-C</a></li>
<li><a href="Object_REXX" title="Object REXX">ooRexx</a></li>
<li><a href="Perl" title="Perl">Perl</a></li>
<li><a href="PHP" title="PHP">PHP</a></li>
<li><a href="PowerShell" title="PowerShell">PowerShell</a></li>
<li><a href="Prolog" title="Prolog">Prolog</a></li>
<li><a href="Python_(programming_language)" title="Python (programming language)">Python</a></li>
<li><a href="R_(programming_language)" title="R (programming language)">R</a></li>
<li><a href="Raku_(programming_language)" title="Raku (programming language)">Raku</a></li>
<li><a href="Rebol" title="Rebol">Rebol</a></li>
<li><a href="Ring_(programming_language)" title="Ring (programming language)">Ring</a></li>
<li><a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></li>
<li><a href="Smalltalk" title="Smalltalk">Smalltalk</a></li>
<li><a href="SuperCollider" title="SuperCollider">SuperCollider</a></li>
<li><a href="Tcl" title="Tcl">Tcl</a></li>
<li><a href="VBScript" title="VBScript">VBScript</a></li>
<li><a href="Wolfram_Language" title="Wolfram Language">Wolfram Language</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Comparison_of_programming_languages" title="Comparison of programming languages">Comparison of programming languages</a></li>
<li><a href="Name_binding" title="Name binding">Name binding</a></li>
<li><a href="Von_Neumann_architecture" title="Von Neumann architecture">Von Neumann architecture</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFMeijer,_Erik_and_Peter_Drayton2005" class="citation cs2"><a href="Erik_Meijer_(computer_scientist)" title="Erik Meijer (computer scientist)">Meijer, Erik</a> and Peter Drayton (2005), <a rel="nofollow" class="external text" href="https://people.dsv.su.se/~beatrice/DYPL/meijer_drayton.pdf"><i>Static Typing Where Possible, Dynamic Typing When Needed: The End of the Cold War Between Programming Languages</i></a> <span class="cs1-format">(PDF)</span>, <a href="Microsoft" title="Microsoft">Microsoft</a> Corporation, <a href="CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.69.5966">10.1.1.69.5966</a></span></cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFHarper2016" class="citation book cs1">Harper, Robert (2016). <i>Practical Foundations for Programming languages</i>. New York: Cambridge University Press. p. 195. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9-781107-150300</bdi>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://static.springsource.org/spring/docs/2.0.x/reference/dynamic-language.html">Chapter 24. Dynamic language support</a>. Static.springsource.org. Retrieved on 2013-07-17.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text">< <cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140302111159/http://groovy.codehaus.org/">"Groovy - Home"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/">the original</a> on 2014-03-02<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-03-02</span></span>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2></div>
<ul><li><cite id="CITEREFTratt2009" class="citation book cs1">Tratt, Laurence (2009). <a rel="nofollow" class="external text" href="https://tratt.net/laurie/research/pubs/html/tratt__dynamically_typed_languages/"><i>Dynamically Typed Languages</i></a>. Advances in Computers. Vol. 77. pp. <span class="nowrap">149–</span>184. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fs0065-2458%2809%2901205-4">10.1016/s0065-2458(09)01205-4</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780123748126</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<p><i>(Many use the term "scripting languages".)</i>
</p>
<ul><li><cite id="CITEREFPrechelt2002" class="citation journal cs1">Prechelt, Lutz (August 18, 2002). <a rel="nofollow" class="external text" href="https://page.mi.fu-berlin.de/prechelt/Biblio/jccpprt2_advances2003.pdf">"Are Scripting Languages Any Good? A Validation of Perl, Python, Rexx, and Tcl against C, C++, and Java"</a> <span class="cs1-format">(PDF)</span>. <i>Advances in Computers</i>. <b>57</b>: <span class="nowrap">205–</span>270. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0065-2458%2803%2957005-X">10.1016/S0065-2458(03)57005-X</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>9780120121571</bdi>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0065-2458">0065-2458</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite></li>
<li><cite id="CITEREFBezroukov2013" class="citation web cs1">Bezroukov, Nikolai (2013). <a rel="nofollow" class="external text" href="http://www.softpanorama.org/Articles/a_slightly_skeptical_view_on_scripting_languages.shtml">"A Slightly Skeptical View on Scripting Languages"</a>. <i>Softpanorama</i> (2.1 ed.)<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite></li>
<li><cite id="CITEREFWall2007" class="citation speech cs1"><a href="Larry_Wall" title="Larry Wall">Wall, Larry</a> (December 6, 2007). <a rel="nofollow" class="external text" href="https://www.perl.com/pub/2007/12/06/soto-11.html/"><i>Programming is Hard, Let's Go Scripting...</i></a> (Speech). <a href="Perl#State_of_the_Onion" title="Perl">State of the Onion</a> 11. <i>Perl.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite></li>
<li><cite id="CITEREFRoth2007" class="citation web cs1">Roth, Gregor (November 20, 2007). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2077792/scripting-on-the-java-platform.html">"Scripting on the Java platform"</a>. <i><a href="JavaWorld" class="mw-redirect" title="JavaWorld">JavaWorld</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite></li>
<li><cite id="CITEREFOusterhout1998" class="citation magazine cs1"><a href="John_Ousterhout" title="John Ousterhout">Ousterhout, John K.</a> (March 1998). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200727185732/http://www.stanfordlibrary.us/~ouster/cgi-bin/papers/scripting.pdf">"Scripting: Higher-Level Programming for the 21st Century"</a> <span class="cs1-format">(PDF)</span>. <i><a href="Computer_(magazine)" title="Computer (magazine)">Computer</a></i>. Vol. 31, no. 3. pp. <span class="nowrap">23–</span>30. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2F2.660187">10.1109/2.660187</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0018-9162">0018-9162</a>. Archived from <a rel="nofollow" class="external text" href="http://www.stanfordlibrary.us/~ouster/cgi-bin/papers/scripting.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2020-07-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite></li>
<li><cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://www.activestate.com/company/press/press-releases/activestate-announces-focus-dynamic-languages/">"ActiveState Announces Focus on Dynamic Languages"</a>. <a href="ActiveState" title="ActiveState">ActiveState</a>. July 26, 2004<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-27</span></span>.</cite>
<ul><li><cite id="CITEREFAscher2004" class="citation web cs1">Ascher, David (July 27, 2004). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20081118035341/https://www.activestate.com/Corporate/Publications/ActiveState_Dynamic_Languages.pdf">"Dynamic Languages — ready for the next challenges, by design"</a> <span class="cs1-format">(PDF)</span>. Whitepapers. <a href="ActiveState" title="ActiveState">ActiveState</a>. Archived from <a rel="nofollow" class="external text" href="https://www.activestate.com/Corporate/Publications/ActiveState_Dynamic_Languages.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2008-11-18.</cite></li>
<li><cite id="CITEREFAscher2004" class="citation web cs1">Ascher, David (July 27, 2004). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20081208121835/http://www.activestate.com/company/newsroom/whitepapers_ADL.plex">"Dynamic Languages — ready for the next challenges, by design"</a>. Whitepapers. <a href="ActiveState" title="ActiveState">ActiveState</a>. Archived from <a rel="nofollow" class="external text" href="http://www.activestate.com/company/newsroom/whitepapers_ADL.plex">the original</a> on 2008-12-08.</cite></li></ul></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Types_of_programming_languages107" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Types_of_programming_languages107" style="font-size:114%;margin:0 4em"><a href="Programming_paradigm" title="Programming paradigm">Types of programming languages</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Level</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Machine_code" title="Machine code">Machine</a></li>
<li><a href="Assembly_language" title="Assembly language">Assembly</a></li>
<li><a href="Compiled_language" title="Compiled language">Compiled</a></li>
<li><a href="Interpreted_language" class="mw-redirect" title="Interpreted language">Interpreted</a></li></ul>
<ul><li><a href="Low-level_programming_language" title="Low-level programming language">Low-level</a></li>
<li><a href="High-level_programming_language" title="High-level programming language">High-level</a></li>
<li><a href="Very_high-level_programming_language" title="Very high-level programming language">Very high-level</a></li>
<li><a href="Esoteric_programming_language" title="Esoteric programming language">Esoteric</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language_generations" title="Programming language generations">Generation</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="First-generation_programming_language" title="First-generation programming language">First</a></li>
<li><a href="Second-generation_programming_language" title="Second-generation programming language">Second</a></li>
<li><a href="Third-generation_programming_language" title="Third-generation programming language">Third</a></li>
<li><a href="Fourth-generation_programming_language" title="Fourth-generation programming language">Fourth</a></li>
<li><a href="Fifth-generation_programming_language" title="Fifth-generation programming language">Fifth</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-11" href="https://en.wikipedia.org/wiki/?title=Dynamic_programming_language&oldid=1295068611">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>